import { request } from './request';

/**
 * 根据经纬度获取位置信息
 * @param {number} lon - 经度
 * @param {number} lat - 纬度
 * @returns {Promise<Object>} 位置信息
 */
export const getLocationByLonLat = async (lon, lat) => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getLocationByLonLat',
    {
      params: {
        lon: lon.toString(),
        lat: lat.toString(),
      },
    },
  );
  return response.data;
};

/**
 * 获取用户当前位置信息（包含经纬度和位置详情）
 * @param {number} longitude - 经度
 * @param {number} latitude - 纬度
 * @returns {Promise<Object>} 完整的位置信息
 */
export const getUserLocationInfo = async (longitude, latitude) => {
  const locationData = await getLocationByLonLat(longitude, latitude);

  return {
    coordinates: {
      longitude,
      latitude,
    },
    locationInfo: locationData,
    timestamp: new Date().toISOString(),
  };
};

/**
 * 获取城市景区数据（大图标+小图标）
 * @param {Object} params - 请求参数
 * @param {string} params.cityCode - 城市代码，可选，示例：650100
 * @param {string} params.latitude - 纬度，可选，示例：84
 * @param {string} params.longitude - 经度，可选，示例：84
 * @param {string} params.pageNum - 页码，可选，示例：1
 * @param {string} params.pageSize - 每页大小，可选，示例：10
 * @returns {Promise<Object>} 景区数据
 */
export const getCityScenicAreasWithSpots = async (params = {}) => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getNearestScenicAreaWithSpots',
    {
      params: {
        cityCode: params.cityCode,
        latitude: params.latitude,
        longitude: params.longitude,
      },
    },
  );

  return response.data;
};

/**
 * 获取地图上展示的景区数据（只需要城市代码）
 * @param {string} cityCode - 城市代码
 * @returns {Promise<Object>} 地图景区数据
 */
export const getMapScenicAreas = async cityCode => {
  const response = await request.get('/travel/app/scenicStatistics/count', {
    params: {
      cityCode: cityCode,
    },
  });

  return response.data;
};

/**
 * 获取周边景区数据
 * @param {Object} params - 请求参数
 * @param {string} params.cityCode - 城市代码，可选，示例：650100
 * @param {string} params.latitude - 纬度，可选
 * @param {string} params.longitude - 经度，可选
 * @param {string} params.pageNum - 页码，可选
 * @param {string} params.pageSize - 每页大小，可选
 * @returns {Promise<Object>} 周边景区数据
 */
export const getOtherScenicAreas = async (params = {}) => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getOtherScenicAreas',
    {
      params: {
        cityCode: params.cityCode,
        latitude: params.latitude,
        longitude: params.longitude,
        pageNum: params.pageNum,
        pageSize: params.pageSize,
      },
    },
  );

  return response.data;
};

/**
 * 获取省内旅游路线数据
 * @param {Object} params - 请求参数
 * @param {string} params.cityCode - 城市代码，可选
 * @param {string} params.pageNum - 页码，可选
 * @param {string} params.pageSize - 每页大小，可选
 * @returns {Promise<Object>} 省内旅游路线数据
 */
export const getProvinceTours = async (params = {}) => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getProvinceTours',
    {
      params: {
        cityCode: params.cityCode,
        pageNum: params.pageNum,
        pageSize: params.pageSize,
      },
    },
  );

  return response.data;
};

/**
 * 获取景区音频和文本
 * @param {string} scenicAreaId - 景区ID
 * @returns {Promise<Object>} 景区音频和文本数据
 */
export const getScenicAudioAndText = async scenicAreaId => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getScenicAudioAndText',
    {
      params: {
        scenicAreaId: scenicAreaId.toString(),
      },
    },
  );

  return response.data;
};

/**
 * 获取景点音频和文本
 * @param {string} scenicSpotId - 景点ID
 * @returns {Promise<Object>} 景点音频和文本数据
 */
export const getScenicSpotAudioAndText = async scenicSpotId => {
  const response = await request.get(
    '/travel/app/scenicStatistics/getScenicSpotAudioAndText',
    {
      params: {
        scenicSpotId: scenicSpotId.toString(),
      },
    },
  );

  return response.data;
};

/**
 * 获取景区下的景点列表
 * @param {string} scenicAreaId - 景区ID
 * @param {number} pageNum - 页码
 * @param {number} pageSize - 每页数量
 * @returns {Promise<Object>} 景点列表数据
 */
export const getScenicAreaAttractions = async (
  scenicAreaId,
  pageNum = 1,
  pageSize = 10,
) => {
  const response = await request.get('/travel/app/scenicAreas/attractions', {
    params: {
      scenicAreaId: scenicAreaId.toString(),
      pageNum: pageNum.toString(),
      pageSize: pageSize.toString(),
    },
  });

  return response.data;
};
